﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <string>
using namespace std;

//class Person
//{
//public:
//	//查询姓名
//	void FindName()
//	{
//		cout << _name << endl;
//	}
//
//	//查询年龄
//	void FindAge()
//	{
//		cout << _age << endl;
//	}
//protected	:
//	string _name = "张三"; //姓名
//	int _age = 18;	       //年龄
//	string _id;            //身份证号
//	string _email;         //电子邮箱
//};
//
//
//class Student :public Person
//{
//public:
//
//	void test()
//	{
//		cout << Person::_age << endl;
//	}
//	//查询学号
//	void FindStuid()
//	{
//		cout << _stuid << endl;
//	}
//
//	//查询年级
//	void FindGrade()
//	{
//		cout << _grade << endl;
//	}
//protected:
//	int _stuid;               //学号
//	float _score = 89.5;	  //分数
//	string _grade = "大二";   //年级
//};
//
//int main()
//{
//	Student s1;
//	/*s1.FindAge();
//	s1.FindName();
//	s1.FindGrade();*/
//	s1.test();
//	return 0;
//}

//namespace xiaoli
//{
//	template<class T>
//	class stack : public std::vector<T>
//	{
//	public:
//		void push(const T& x)
//		{
//			vector<T>::push_back(x);
//		}
//		void pop()
//		{
//			vector<T>::pop_back();
//		}
//		const T& top()
//		{
//			return vector<T>::back();
//		}
//		bool empty()
//		{
//			return vector<T>::empty();
//		}
//	};
//}



//class Person
//{
//protected:
//	string _name; // 姓名
//	string _sex; // 性别
//	int _age; // 年龄
//};
//class Student : public Person
//{
//public:
//	int _No; // 学号
//};
//int main()
//{
//	Student s1;
//	// 派⽣类对象可以赋值给基类的指针/引⽤
//	Person* p1 = &s1;
//	Person& p2 = s1;
//	// 派⽣类对象可以赋值给基类的对象是通过调⽤基类的拷⻉构造完成的
//	Person p3 = s1;
//	// 基类对象不能赋值给派⽣类对象，这⾥会编译报错
//	s1 = p3;
//	return 0;
//}


//继承与友元
//class Student;
//class Person
//{
//public:
//	friend void Print(const Person& p, const Student& s);
//protected:
//	string _name; // 姓名
//};
//class Student : public Person
//{
//public:
//	friend void Print(const Person& p, const Student& s);
//protected:
//	int _stuid;   // 学号
//};
//void Print(const Person& p, const Student& s)
//{
//	cout << p._name << endl;
//	cout << s._stuid << endl;
//}


//class Person
//{
//public:
//	string _name;
//	static int _count;
//};
//int Person::_count = 0;
//class Student : public Person
//{
//protected:
//	int _stuid;
//};
//int main()
//{
//	Person p;
//	Student s;
//	// 这⾥的运⾏结果可以看到⾮静态成员_name的地址是不⼀样的
//	// 说明派⽣类继承下来了，基类和派⽣类对象各有⼀份
//	cout << &p._name << endl;
//	cout << &s._name << endl;
//
//	// 这⾥的运⾏结果可以看到静态成员_count的地址是⼀样的
//	// 说明派⽣类和基类共⽤同⼀份静态成员
//	cout << &p._count << endl;
//	cout << &s._count << endl;
//
//	// 公有的情况下，基类和派⽣类指定类域都可以访问静态成员
//	cout << Person::_count << endl;	
//	cout << Student::_count << endl;
//	return 0;
//}


//// 使⽤虚继承Person类
//class Student : virtual public Person
//{
//protected:
//	int _stuid; //学号
//};
//
//// 使⽤虚继承Person类
//class Teacher : virtual public Person
//{
//protected:
//	int _teachid; //教职工编号
//};
//
//
////博士
//class Doctor : public Student, public Teacher
//{
//protected:
//	int _count; //论文数量
//};
//
//int main()
//{
//	// 使⽤虚继承，可以解决数据冗余和⼆义性
//	Doctor a;
//	a._name = "Peter";
//	return 0;
//}